<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>

</body>
<script>
// var obj={
//   _name:'123',
//   set name(value){
//     this._name=value;
//   },
//   get name(){
//     return this._name;
//   },
//   get name2(){
//     return 'hahh';
//   }
// };
//
// console.log(obj.name);//123
// console.log(obj.name2);//hahh
//
// var obj={
//   _name:'123',
//   set name(value){
//     this._name=value;
//   }
// };
//
// console.log(obj.name);//undefined

// var obj={
//   _name:'123',
//   set name(value){
//     this._name=value;
//   },
//   get name(){
//     return this._name;
//   }
// };
//
// console.log(obj._name);//123
// obj.name='223'
// console.log(obj._name);//223
//
// var obj={
//   _name:'123',
//   get name(){
//     return this._name;
//   }
// };
//
// console.log(obj._name);//123
// obj.name='223'
// console.log(obj._name);//123

// var obj={
//   _name:'123',
//   set name(value){
//     this._name=value;
//   },
//   get name(){
//     return this._name;
//   }
// };
//
// console.log(obj.name);//123
// obj.name='223'
// console.log(obj.name);//223

// var obj=Object.create(Object.prototype,{
//   _name:{
//     value:'123'
//   },
//   name:{
//     get:function(){
//       return this._name;
//     },
//     set:function(value){
//       this._name=value;
//     }
//   }
// })
//
// console.log(obj);//123
// console.log(obj.name);//123
// obj.name='223'
// console.log(obj.name);//223

// var obj={
//   _name:'123'
// }
//
// Object.defineProperty(obj,'name',{
//   get:function(){
//     return this._name;
//   },
//   set:function(value){
//     this._name=value;
//   }
// })
//
// console.log(obj);
// console.log(obj.name);//123
// obj.name='223'
// console.log(obj.name);//223


// var obj={
//   _name:'123'
// }
//
// Object.defineProperties(obj,{
//   name:{
//     get:function(){
//       return this._name;
//     },
//     set:function(value){
//       this._name=value;
//     }
//   }
// })
//
// console.log(obj);
// console.log(obj.name);//123
// obj.name='223'
// console.log(obj.name);//223


var obj={
  _name:'123'
}

obj.__defineGetter__('name',function(){
  return this._name;
});
obj.__defineSetter__('name',function(value){
  this._name=value;
})


console.log(obj);
console.log(obj.name);//123
obj.name='223'
console.log(obj.name);//223

</script>
</html>
